#include <iostream>
using namespace std;

// 50.Pow(x, n)
// 实现 pow(x, n) ，即计算 x 的整数 n 次幂函数（即，x^n ）
// https://leetcode.cn/problems/powx-n/description/

// 分治
class Solution {
public:
    double myPow(double x, int n) {
        if(n == 0)
            return 1.0;
        if(n < 0)
            return 1.0 / myPow(x, (long long)(-n));
        // 当n是奇数时，则转换为 x 乘以 x的n-1次方
        if(n % 2 == 1)
            return x * myPow(x, n-1);

        return myPow(x * x, n / 2);
    }
};

int main() {
    cout << Solution().myPow(2.0, 10) << endl;
    // 1024.00
    cout << Solution().myPow(2.1, 3) << endl;
    // 9.261
    cout << Solution().myPow(2.0, -2) << endl;
    // 0.25
//    cout << Solution().myPow(2.0, -2) << endl;
    // 0.25

//    cout << Solution().myPow(-2.0, 2) << endl;
    // 4.0

//    cout << Solution().myPow(34.00515, -3) << endl;
    // 3e-05

//    cout << Solution().myPow(1.0, -2147483648) << endl;
    // 3e-05
    return 0;
}
